from time import sleep

from tool.screenshot import capture_screenshot


def dw(dv, element, positioning_method, case_name):
    '''
    :param dv: 设备
    :param element: 定位元素
    :param positioning_method: 定位方式
    :return: 判定元素是否存在，存在则返回元素对象用于后续操作
    '''
    sleep(1.5)
    if positioning_method == 'xpath':
        if not dv.xpath(element).exists:
            print('断言元素不存在，直接判定断言失败')
            capture_screenshot(f'用例：{case_name}，断言元素不存在')
            return False
        return dv.xpath(element)
    if positioning_method == 'text':
        if not dv(text=element).exists:
            print('断言元素不存在，直接判定断言失败')
            capture_screenshot(f'用例：{case_name}，断言元素不存在')

            return False
        return dv(text=element)


def element_existence(dv, element, positioning_method, case_name):
    '''
      :param dv: 设备
      :param element: 定位元素
      :param positioning_method: 定位方式
      :return:通过元素是否存在来断言
      '''
    element_ = dw(dv, element, positioning_method, case_name)
    if not element_:
        return False
    return True


def element_info_existence(dv, element, positioning_method, case_name):
    '''
      :param dv: 设备
      :param element: 定位元素
      :param positioning_method: 定位方式
      :return:通过元素属性是否发生变化来断言
      '''
    if not dw(dv, element, positioning_method, case_name):
        return False
    else:
        el = dw(dv, element, positioning_method, case_name)
        initial_info = el.info
        print(f'元素点击前属性{initial_info}')
        el.click()
        sleep(1)
        clicked_info = el.info
        print(f'元素点击后属性{clicked_info}')
        diff = {k: clicked_info[k] for k in clicked_info if clicked_info[k] != initial_info[k]}
        print(f'元素差异字段{diff}')
        if len(diff) == 0:
            print('元素属性未发生变化，断言失败')
            return False
        return True


def element_text_existence(dv, element, positioning_method, text, case_name):
    '''

    :param dv: 设备
    :param element: 定位元素
    :param positioning_method: 定位方式
    :param text: 预期结果文本
    :return: 通过文本是否相等来断言
    '''
    if not dw(dv, element, positioning_method, case_name):
        return False
    else:
        el = dw(dv, element, positioning_method, case_name)
        el_text = el.get_text()
        if not text == el_text:
            print(f'文本不匹配预期结果{text}，实际结果{el_text}')
            return False
        else:
            return True
